package com.guodi.map.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.guodi.core.secure.utils.AuthUtil;
import com.guodi.map.entity.MapSplitScreen;
import com.guodi.map.mapper.MapSplitScreenMapper;
import com.guodi.map.service.IMapSplitScreenService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Objects;

/**
 * @描述: 分屏记录表 服务实现类
 * @作者: 陈宏成
 * @日期: 2021-11-10
 */
@Service
public class MapSplitScreenServiceImpl extends ServiceImpl<MapSplitScreenMapper, MapSplitScreen> implements IMapSplitScreenService {

    @Resource
    private MapSplitScreenMapper mapSplitScreenMapper;

    /**
     * 获取用户分屏记录
     * @入参： userId 用户id，如果为空，就取当前登录用户的记录
     * @出参： 用户分屏记录
     * @作者： 陈宏成
     * @日期： 2021/11/10
     */
    @Override
    public Page<MapSplitScreen> pageUserSplitScreen(Page page, String userId){
        userId = StringUtils.isBlank(userId)? AuthUtil.getUserId().toString(): userId;
        LambdaQueryWrapper<MapSplitScreen> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(MapSplitScreen::getCreator, userId);
        queryWrapper.orderByDesc(MapSplitScreen::getCreateTime);
        Page page1 = this.page(page, queryWrapper);
        return page1;
    }

    /**
     * 判断名字是否重复
     * @入参： name 分屏名称
     * @入参： userId 用户id，如果为空，就取当前登录用户的记录
     * @入参： id 记录id，如果不为空，则会判断下重名的是不是自己
     * @出参： false -- 不存在， true -- 存在
     * @作者： 陈宏成
     * @日期： 2021/11/10
     */
    @Override
    public boolean checkNameExist(String name, String userId, String id){
        userId = StringUtils.isBlank(userId)? AuthUtil.getUserId().toString(): userId;
        LambdaQueryWrapper<MapSplitScreen> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(MapSplitScreen::getName, name);
        queryWrapper.eq(MapSplitScreen::getCreator, userId);
        List<MapSplitScreen> list = this.list(queryWrapper);
        // 没有记录直接返回false
        if (list == null || list.isEmpty()){
            return false;
        }
        // 已有记录，但没有id，直接返回true
        if (StringUtils.isBlank(id)){
            return true;
        }
        // 已有记录，且有id，如果存在和id不等的记录就返回true
        for(MapSplitScreen mapSplitScreen : list) {
            if (!Objects.equals(id, mapSplitScreen.getId())){
                return true;
            }
        }
        return false;
    }
}
